# logging_config.py
import logging
import os
from logging.handlers import RotatingFileHandler
from datetime import datetime

from config import DIR_PATH

# 假设 DIR_PATH 是项目根目录的绝对路径（请确保在当前文件中已正确定义或导入）
# 例如：DIR_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 如果 DIR_PATH 在其他文件中定义，需先导入：from config import DIR_PATH

# 日志文件夹路径（基于项目根目录 DIR_PATH）
LOG_DIR = os.path.join(DIR_PATH, "logs", "api_tests")  # 项目根目录/logs/api_tests
if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)  # 自动创建多级目录（如果不存在）

# 日志文件名（包含当前日期）
current_date = datetime.now().strftime("%Y%m%d")
LOG_FILE = os.path.join(LOG_DIR, f"api_test_{current_date}.log")

# 日志格式配置
LOG_FORMAT = logging.Formatter(
    "%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s"
)

# 控制台日志格式（简化版）
CONSOLE_FORMAT = logging.Formatter(
    "%(asctime)s - %(levelname)s - %(message)s"
)


def get_logger(name=__name__):
    """获取配置好的日志器"""
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)  # 全局日志级别

    # 避免重复添加处理器
    if logger.handlers:
        return logger

    # 1. 文件日志处理器（轮转模式）
    file_handler = RotatingFileHandler(
        LOG_FILE,
        maxBytes=10 * 1024 * 1024,  # 单个文件最大10MB
        backupCount=5,  # 保留5个备份文件
        encoding="utf-8"
    )
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(LOG_FORMAT)

    # 2. 控制台日志处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(CONSOLE_FORMAT)

    # 添加处理器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger